Installer un VPN Wireguard sur sa raspberry [tuto]

7 février 2020 benzo androïd, chiffrement, linux, raspberry, réseau, sécurité, serveur, vie privée 0

wireguard raspberrywireguard raspberry 
 

On l’a appris fin janvier, Wireguard VPN va être intégré officiellement au prochain noyau linux. Pour ceux qui ne savent toujours pas de quoi il en retourne c’est par ici. En attendant, pour les autres, les impatients, les geeks, les curieux ou les 3 à la fois, il est temps de tester la bête !! Voici le petit tuto que je vous avais promis la semaine dernière, à savoir :
Comment installer un serveur VPN wireguard sur sa raspberry?

Dans ce tutoriel j’utilise:
– une raspberry 3 avec la distrib raspbian Buster installée (serveur vpn)
– un smartphone android et un pc ubuntu/desktop (clients vpn )

Je pars du principe que vous savez installer,configurer,sécuriser une raspbian , ajouter des règles au niveau du parefeu ,en bon nerd que vous êtes ^_^
Pour l’install et la config du VPN, let’s go!

1 – Installation des paquets

On a le choix entre 2 méthodes :

J’ai opté pour la méthode 2 (flemme de recompiler en cas de future maj). Pour la suite des manips, se connecter dans un terminal, avec les superpouvoirs.

– Ajout du dépôt qui va bien sur la raspbian:

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list

-On ajuste la priorité du dépôt « unstable » pour pas tout péter lors de futures maj:
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable

-On met à jour la liste des paquets:
apt update

Ne pas s’inquiéter des quelques messages d’erreurs qui s’affichent. En effet,il manque les signatures du dépôt qui ne peuvent pas être vérifiées pour le moment (GPG error …NO PUBKEY).

-On va y remédier :

apt install dirmngr
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
apt update

Enfin , installation des paquets:
apt install wireguard dkms raspberrypi-kernel-headers wireguard-dkms wireguard-tools

Et c’est terminé pour la partie installation des packages!

2 – Générer les clés privées et publiques

Comme pour ssh, on génère une clé publique et une clé privée pour chaque machine (serveur, client1,client2 …)

cd /etc/wireguard ; umask 077

– clés pour le serveur vpn:

wg genkey > server_private.key
wg pubkey > server_public.key < server_private.key

– clés pour le client vpn (tablette, smartphone,pc….)

wg genkey > client1_private.key
wg pubkey > client1_public.key < client1_private.key

3 – Éditer les fichiers de conf :

Donc toujours dans un terminal sur notre raspberry.

– pour le SERVEUR :

nano /etc/wireguard/wg0.conf

-copier/coller les lignes suivantes dans le fichier de conf.
J’ai essayé de commenter un max pour ceux qui ne comprendraient pas bien quelles valeurs sont à modifier en fonction de leur environnement.

[Interface]

# plage d'adresse privée pr le réseau vpn

Address = 10.9.0.1/24

# port d'écoute du serveur vpn

ListenPort = 51820

# @ip du resolveur dns , ici c'est l'@ip de mon pihole

# mais on peut aussi mettre celle d'un public,par ex:1.1.1.1

DNS = 192.168.1.2 # ip du resolveur

# mettre la clé privée de notre serveur (fichier server_private_key)

PrivateKey = VJUUasN+z6hYn4C6xxxxxxxxxxxxxxxx=

# règles de routage

# penser à adapter avec le nom de votre interface reseau (ici eth0)

# au besoin faire un "ip a" pour trouver votre interface

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]

# client1 - telephone android

# contenu de la clé publique (fichier client1_public.key)

PublicKey = bLuMB4ed7txxxxxxxxxxxxxxxxxxxxxxxx

# @ip privée du vpn client

AllowedIPs = 10.9.0.2/32

PersistentkeepAlive = 60

 

– pour le CLIENT :

On génère ce fichier à partir de notre serveur. Une fois édité, il sera à transféré sur le client (smartphone, pc).

nano /etc/wireguard/wg0-client1.conf

[Interface]

#client 1

# @ip du client

Address = 10.9.0.2/32

# contenu du fichier client1_private_key

PrivateKey = aI2cUEOwaMNjgfdxxxxxxxxxxxxxxxxxxxxxxxxx

[Peer]

#client 1

# contenu du fichier server_public_key

PublicKey = Tzq/nLB07p8GKxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# @ipPubliqueBox:port_vpn,

Endpoint = 82.xx.xx.xxx:51820

AllowedIPs = 0.0.0.0/0

#(si 0.0.0.0/0 alors tout le traffic est routé dans le vpn)

PersistentKeepalive = 25

-Activer le routage des paquets IP sur le rpi:

dans le fichier nano /etc/sysctl.conf
passer la valeur net.ipv4.ip_forward= à 1

Pour les poilus de la main, on peut le faire en une seule ligne de commande :

sed -ir 's/#{1,}?net.ipv4.ip_forward ?= ?(0|1)/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

On recharge les paramètres du noyau:
systemctl -p /etc/sysctl.conf

Activer l’interface:
wg-quick up wg0

Pour voir le status de la connexion :
wg-quick show wg0

Vérifier le tunnel:
ip a

Pour voir le status de la connexion :
sudo wg

Activer l’interface pour chaque redémarrage:
sudo systemctl enable wg-quick@wg0

4 – Configurer les clients VPN
(téléphone Android ou pc)

selon le système que vous utilisez (android , linux, windows, macOS….) vous aurez toutes les infos détaillées sur la doc officielle pour installer le client wireguard sur votre pc. Sinon, pour ceux qui auraient un téléphone android et/ou ubuntu voilà comment je m’y suis pris:

Résultat de recherche d'images pour "android"Résultat de recherche d'images pour "android" 
 

– télécharger l’application wireguard sur le dépôt libre Fdroïd.

Pour récupérer le fichier de conf sur notre téléphone, on va le faire à partir d’un QR code généré sur notre raspberry .

sudo apt install qrcode

qrencode -t ansiutf8 < /etc/wireguard/wg0-client.conf

Et voilà le joli Qr code correspondant à la conf vpn pour notre téléphone:

Résultat de recherche d'images pour "android"Résultat de recherche d'images pour "android" 
 

Il ne reste plus qu’à scanner et à importer le fichier dans l’appli wireguard installée précédemment sur notre android.

Sur un pc linux (ubuntu)

Résultat de recherche d'images pour "linux inside"Résultat de recherche d'images pour "linux inside" 
 

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard

Lancer la connexion vpn:
wg-quick up wg0

Vérifier le statut de la conenxion:
wg-quick status

Enfin, on vérifie qu’on a bien récupéré l’adresse IP publique de notre box:
curl ifconfig.me

Désactiver la connexion vpn:
wg-quick down wg0

Régles du parefeu:

Ne pas oublier d’ajouter une règle pour autoriser la connexion entrante vers le serveur VPN placé derrère votre box:

Quelques infos supplémentaires:

Voilà j’espère que vous aurez réussi à tester wireguard avec succès et que comme moi vous allez apprécier son utilisation au quotidien!